package rpc

import (
	"net/http"
	nrpc "net/rpc"

	"gitee.com/allowall-package/goutil/fn"
)

var ServerAddr = ":8080"

// 参数
type Params struct {
	Num1 int
	Num2 int
}

// 服务
type Calculator struct{}

// 方法
func (c *Calculator) Add(p Params, r *int) error {
	*r = p.Num1 + p.Num2
	return nil
}

func RpcServerRun() error {
	// 创建一个计算器服务
	calculator := new(Calculator)
	// 将计算器服务注册到rpc
	nrpc.Register(calculator)
	// 服务注册绑定到http协议上
	nrpc.HandleHTTP()

	fn.Dump(fn.FuncInfo(), ServerAddr)
	// 监听服务
	return http.ListenAndServe(ServerAddr, nil)
}

func RpcClientCall() {
	// 连接远程rpc服务
	conn, err := nrpc.DialHTTP("tcp", ServerAddr)
	if err != nil {
		fn.Dump(fn.FuncInfo(), err)
		return
	}

	res := 0
	conn.Call("Calculator.Add", Params{1, 2}, &res)

	fn.Dump(fn.FuncInfo(), res)
}
